package unifor.mia.redes.relprotocol;

import unifor.mia.redes.relprotocol.channel.Channel;
import unifor.mia.redes.relprotocol.msg.Mensagem;

public class ReliableReceiver extends ReliableComponent {

	@Override
	public void run() {
		for(;;){
			String msg = receive();
			System.out.println("MENSAGEM RECEBIDA: " + msg);
		}

	}

	private String receive() {
		Mensagem m;
		StringBuffer sb = new StringBuffer();
		boolean fim = false;
		while(!fim){
			m = Channel.read();
			if(checkIntegrity(m)){
				sb.append(m.getBody());
				fim = m.end();
				Channel.ACK();
			} else {
				Channel.NAK();
			}
		}
		return sb.toString();
	}

	private boolean checkIntegrity(Mensagem m) {
		String body = m.getBody();
		String hash = criarHash(body);
		return hash.equals(m.getHash());
	}

}
